<?php
/*
 * Implementa��o do item de compra Servi�o.
 * Esta classe representa os servi�os que podem ser prestados a institui��o.
 * Um servi�o � composto por:
 * C�digo (CATSERV) - c�digo �nico do servi�o cadastrado SIASG
 * Nome - Nome do servi�o.
 * Descri��o - Descreve  o servi�o.
 * Codigo Aberto - Booleano para informar se o c�digo vinculado ao servi�o � aberto ou n�o.
 */

if( !function_exists('__autoload') )
{
    function __autoload($class_name) {
    require_once $class_name . '.php';
    }
}

class Servico extends Objeto
{
	
	protected $dao; 
	/**
	 * Construtor da classe.
	 * id - Chave-prim�ria do servi�o cadastrado no banco de dados.
	 * codigo - c�digo �nico do servi�o cadastrado SIASG
 	 * nome - Nome do servi�o.
 	 * descri��o - Descreve  o servi�o.
 	 * codigoAberto - Booleano para informar se o c�digo vinculado ao servi�o � aberto ou n�o.
	 */
	public function __construct( $id = NULL, $compraId = NULL, $codigo = NULL, $especificacao = NULL )
	{
		parent::__construct( $id, $compraId, $codigo, $especificacao  );
        $this->dao = new ServicoDAO();
    }
    
	/**
	 * Insere um registro no banco de dados na tabela t_servico com os dados do objeto.
	 * @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.	 
    */
	public function Salvar()
	{
		$resultado = $this->dao->Salvar( $this );
		return $resultado;
	}
	
	public function CarregarServicosPorProcesso( $processoId )
	{
		$resultado = $this->dao->CarregarServicosPorProcesso( $processoId );
		return $resultado;
	}
	
	public function CarregarServicoPorId( $servicoId )
	{
		$resultado = $this->dao->CarregarServicoPorId( $servicoId );
		return $resultado;
	}
	
	/**
	 * Transforma o array com os registros retornados da tabela t_servico em objetos do tipo Servico.
	 * @param $array - Array com os registros retornados de uma consulta a tabela t_servico.
	 * @return Retorna um array de objetos do tipo Servico ou FALSE caso o argumento informado n�o seja do tipo requerido.
	 */
	static public function ArrayParaObjetos( $array )
	{
		if( !is_array($array) ) // Verifica se o argumento recebido � um array, caso n�o seja retorna FALSE.
			return FALSE;
		
		$objetos = array();
		for( $i = 0; $i < count( $array ); $i++ )
		{

			if( array_key_exists('id', $array[$i]) )
				$servico = new Servico( $array[$i]['id'], $array[$i]['t_compra_id'], $array[$i]['codigo'], $array[$i]['especificacao'] );
			else
				$servico = new Servico( 0, 0, $array[$i]['codigo'], $array[$i]['especificacao'] );
				
			
			$objetos[] = $servico;
		}
		return $objetos;
	}
	
	/**
	 * Altera o registro no banco de dados na tabela t_servico associado ao objeto.
	 * @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio. 
	*/
	public function Atualizar()
	{
		$resultado = $this->dao->Atualizar( $this );
		return $resultado;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	 * Exclui um registro no banco de dados da tabela t_servico.
	 * @param $servicoId - Chave-prim�ria no banco de dados do servi�o.
	 * @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio. 
	*/
	public function Remover( $servicoId )
	{
		$resultado = $this->dao->Remover( $servicoId );
		return $resultado;
	}

	
	
	/**
	 * Transforma um array de objetos Servi�o em uma string no formato XML contendo as informa��es dos servi�os.
	 * @param $array - Array de objetos do tipo Servico.
	 * @return Retorna uma string no formato XML contendo as informa��es dos servi�os.
	 */
	static public function ArrayParaXML( $array )
	{
		if( !is_array($array) ) // Verifica se o argumento recebido � um array, caso n�o seja interrompe a execu��o do m�todo.
			return FALSE;
		
		$xml = "<servicos>\n";
		for( $i = 0; $i < count( $array ); $i++ )
		{
			$xml .= "<servico>\n";
			$xml .= "<id>".$array[$i]->id."</id>\n";
			$xml .= "<catserv>".$array[$i]->codigo."</catserv>\n";
			$xml .= "<codigo_aberto>".$array[$i]->codigoAberto."</codigo_aberto>\n";
			$xml .= "<nome><![CDATA[".$array[$i]->nome."]]></nome>\n";
			$xml .= "<descricao><![CDATA[".$array[$i]->especificacao."]]></descricao>\n";
			$xml .= "</servico>\n";
		} 
		$xml .= "</servicos>\n";
		
		return $xml;
	}

}
?>